home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230D / NEW2TN1.12 < prev    next >
Text File  |  1995-06-15  |  23KB  |  547 lines

  1.                     Upgrading TNOS to release 1.12
  2.          http://www.lantz.com/Update1.12.html
  3.  
  4.  
  5. TNOS 1.12 will be the next release of TNOS, to be released sometime
  6. before the formation of the United Federation of Planets. Hopefully,
  7. this list of changes will give you an idea of the scope of work that has
  8. occurred between versions. Of course, it may be faster just to re-read
  9. the docs when the next version is released.
  10.  
  11.  
  12. This document is divided into:
  13.  
  14.  
  15.     * Bug Fixes
  16.     * Improvements
  17.     * Minor Changes
  18.     * Known Bugs
  19.     * To-Do List
  20.  
  21.  
  22.  
  23. ------------------------------------------------------------
  24. Bug Fixes:
  25.  
  26. The following bugs have been squashed.
  27.  
  28.  
  29. *    Tscript mailing once again works 
  30.   The ~d and ~dr commands didn't mail their output in release 1.11. Now
  31.   fixed.
  32.  
  33. *    Small TCPGATE buglet fixed 
  34.   When a TCPGATE connection was made, the logfile tried to print an integer
  35.   as a string, causing garbage in TNOS/DOS logfiles, and causing occasional
  36.   program crashes under TNOS/Linux. Now fixed.
  37.  
  38. *    The BBS 'RM' command fixed 
  39.   A seemingly long standing bug with the 'RM' command has been fixed. (Can't
  40.   believe no one ever reported that one before).
  41.  
  42. *    A long-standing trace buglet squashed 
  43.   For quite some time (maybe forever) the hex dump tracing of AX25 interfaces
  44.   have had a leading zero byte in the display. In TNOS 1.00, I stripped the
  45.   first byte, only to find that the AX25 was fine, but others weren't.
  46.   TNOS 1.10 and 1.11 were released with the original buglet. Now the first
  47.   byte (the bogus zero byte) is stripped if the interface is an AX25, but
  48.   it is left alone for all other interface types.
  49.  
  50. *    Fixed the alternate REQSVR "uploadblind" syntax 
  51.   The "ub filename" alternate syntax for the "uploadblind" sub-command didn't
  52.   work due to a now squashed buglet.
  53.  
  54. *    Fixed a minor security buglet in the BBS 'conf' command 
  55.   There has been a minor buglet discovered in the mbox 'conf' command. If
  56.   you use the 'c' command, then permissions are properly checked for the
  57.   NO_CONVERS flag, and the attempt fails if the permissions have this flag.
  58.   Well, the 'conf' command WASN'T checking this permission.
  59.  
  60. *    New mail buglet smashed 
  61.   There was a buglet that occurred if you were in the BBS with unread mail
  62.   and a new message came in. What happened was that the current message was
  63.   set in the routine that checks for new mail to the FIRST unread message,
  64.   which is one MORE than what is just WAS. This now preserves the current
  65.   message number when new mail comes in.
  66.  
  67. *    BBS buglet, causing unnecessary DNS lookups, is dead 
  68.   There was a buglet in the isanIPhost() function, which is called when the
  69.   user sends a mail message. It had a piece of code, which looked at the
  70.   address, and if it was a common Internet address extension, then it would
  71.   bypass a DNS lookup. 
  72.  
  73.   Well, the logic was wrong, and the result was to ALWAYS look up the
  74.   address with DNS.
  75.  
  76. *    BBS Login 'ghost' now busted 
  77.   Thanks to Rob Mayfield <mayfield@guest.adelaide.edu.au> for pointing me
  78.   to another problem. Every once in a while (in any xNOS) you will see that
  79.   you have a ghost user, that is 'LOGGING IN', but isn't really there. They
  80.   WERE, but the connection is gone and the tdisc timer didn't kick in. 
  81.   Well, this was because the tdisc timer wasn't started until AFTER the
  82.   login was complete. This has now been moved to before the login, so when
  83.   the 'mbox tdisc' timer kicks, the ghost is busted...
  84.  
  85. *    Small filename buglet with tutorial files under Linux 
  86.   While the intention was to allow a tutorial file to be *.tut, for Linux
  87.   this was fine but NOT if you wanted to name it *.*.tut. There could be
  88.   only one '.' in a file name. 
  89.  
  90.   Thanks to Rob Mayfield <mayfield@guest.adelaide.edu.au> for catching this
  91.   one....
  92.  
  93. *    Expiration bug found 
  94.   One of the hardest ones I've had to find was this one....
  95.  
  96.   It seems that if the public areas are expiring AND a message comes in for
  97.   THAT area while THAT area is expiring, bad things happen. Sometimes the
  98.   file(s) get corrupted. Sometimes a lockup. Sometimes the SMTP process
  99.   would abort, leaving the ".CTL" file open. When it tries again later, if
  100.   the expiration is STILL going on (large file - short timers), then
  101.   ANOTHER ctl file COULD be left open. This SOMETIMES resulted in DOS
  102.   getting all available files hanging, making a crash eventual.
  103.  
  104.   Well, this one should be good and squashed!
  105.  
  106. *    Forwarding subchannels quirk fixed 
  107.   If you were using the subchannels feature for forwarding, and not all BBSs
  108.   with traffic to pass could start (due to subchannel limiting), then a quirk
  109.   occured if the first (or an early BBS) fails, due to not being available.
  110.   If this happened, the next forwarding slot would go to them, NOT to the
  111.   next one waiting. This only became a BIG problem if the subchannel was
  112.   limited to one. In this case, the next ones NEVER did get a chance.This has
  113.   now been fixed.
  114.  
  115. *    Statline command in Linux version fixed 
  116.   I THINK (repeat, THINK) that I found what was goofing up the statline
  117.   functionality under Linux, and causing the instability.
  118.   The problem was two-fold. If you were NOT on the command session the
  119.   display would not update, though the routine WAS being called !?!?
  120.   Second, turning it on made you a ticking timebomb waiting for a place to
  121.   happen.
  122.  
  123.   Well, it seems that it WAS updating the screen, the COMMAND screen. And
  124.   after it had been sufficiently backlogged, the thing blew! So you could
  125.   stay on the command session all day with no problem, but start to do
  126.   something in another session and you would die after a SHORT while.
  127.  
  128. *    BBS Mail scan at startup w/Linux 
  129.   There was a bug with the mail scan at login in the Linux version. It is
  130.   fixed in release 1.12
  131.  
  132.  
  133.  
  134. ------------------------------------------------------------
  135. Improvements:
  136.  
  137. The following optimizations and improvements have occurred.
  138.  
  139.  
  140.  
  141. *    Trace display of encap frames improved 
  142.   Added code to the tracing of encapsulated packets to show the encap
  143.   IP type, which is either 4 or 94. Until the 94 type is completely history,
  144.   this will assist in debugging encap problems.
  145.  
  146. *    Home BBS prompt message not in a changable file 
  147.   Changed the ASKHOME first-time prompt message from being a compiled in
  148.   message to being one read from a file named '/spool/askhome.dat'.
  149.  
  150. *    Completely customizable prompt 
  151.   Added a new option to the 'prompt' command, "prompt custom 'promptstr'"
  152.   which allows you to fully customize the prompt to whatever you wish. To use
  153.   imbedded spaces, surround the string in quotes.
  154.  
  155. *    Two new short-cut commands 
  156.   Added two new command session commands, 'gone' and 'here'. These 'gone'
  157.   command is the same as 'attend off' and 'mbox attend off'. The 'here'
  158.   command sets these both to 'on'. 
  159.  
  160. *    Made the rewrite file parsing more dependable 
  161.   The routine that parsed the rewrite file was very dependent on having only
  162.   a single space or tab between fields. This is no longer a problem.
  163.  
  164. *    A small change to Conference Bridge flow control 
  165.   Made a small change to the flow control, which places the Conference stream
  166.   in non-CR flow mode during the processing of Conference Bridge commands,
  167.   and then places it back into CR flow control while waiting for new commands
  168.   or data (the original flow control). This allows the incoming data messages
  169.   to come out as soon as they arrive, without queueing, but makes the output
  170.   of commands (like /who) come in the most efficient manner for the interface.
  171.  
  172. *    Added run-time configuration of the ARP expiration timeout 
  173.   Now there is a 'arp expire numseconds' command. The default is the old
  174.   hardcoded value of 900 (15 minutes).
  175.  
  176. *    Added an 'unlock' command 
  177.   Necessity again adds to the command set! There is now a command session
  178.   command 'unlock unlockpassword' that can be accessed as a remote sysop
  179.   to bring a mountaintop TNOS box out of keyboard lock, so you can allow
  180.   a volunteer to assist on site without giving the password out.
  181.  
  182. *    Also now allow remote locking 
  183.   To allow the keyboard to be secured remotely, the previousi restriction
  184.   to the 'lock' command, which would not allow it to be executed remotely,
  185.   has been removed. The idea is, if they have remote sysop permissions,
  186.   then you are already trusting them, so allow it.
  187.  
  188. *    Added ability to ALWAYS display MOTD file 
  189.   The MOTD file used to be a one-shot only, that is, you only saw it once,
  190.   on your next login only. To display it again after changes, you used the
  191.   'mbox newmotd' command. There is now a 'mbox motdalways' command, so
  192.   if you desire to, you can always have the MOTD file displayed on EACH login.
  193.  
  194. *    Extended the flexibility of security permissions 
  195.   I've added two new security subcommands, 'amprperms' and 'nonamprperms',
  196.   which ought to be obvious on who they are for ;-)
  197.   I also made a change to how these work, so let me explain from scratch:
  198.  
  199.   The security subcommands of 'amprperms', 'ax25perms', 'nonamprperms',
  200.   and 'tipperms' serve as a way to have a greater deal of control over
  201.   anonymous logins to the BBS. These all default to a value of zero, which
  202.   disables their use. When a user logs into the BBS anonymously, they get
  203.   whatever value the 'univperm' entry is set for (if it exists). Then the
  204.   type of connection is determined; i.e. ampr telnet, ax25, non-ampr
  205.   telnet, or tipmail. IF the corresponding security permission is non-zero,
  206.   then THAT value will be used, overridding the 'univperm' permissions.
  207.  
  208.   This allows you to have different anonymous permissions for each of these
  209.   four groups, or use the old way if you prefer.
  210.  
  211. *    New BBS script hooks for access denial 
  212.   There is also a new set of mbox script hooks in all of the routines that
  213.   deny access for gatewaying to either converse, netrom, ax25 connects,
  214.   telnet, or if the use is denied because the 'mbox secure' flag is on.
  215.  
  216.   The script that will be called (if it exists) is the
  217.   spool/cmds/denied.sys script. It is passed in ~0 a string of 'denied xxxx',
  218.   where 'xxxx' is either 'converse', 'ax25', 'telnet', 'netrom', or 'secure'.
  219.  
  220.   This allows you to make a custom and more friendly message explaining the
  221.   denial.
  222.  
  223. *    TAPR Hierarchical Addressing Protocol enforced 
  224.   This release enforces the TAPR
  225.   Hierarchical Addressing Protocol (x.3.4) as published. The 'mbox haddress'
  226.   command will NOT accept an address that is not using one of the 19
  227.   4-character Continent Identifiers listed in the protocol or an address
  228.   that is not using a 3-character Country Identifier.
  229.  
  230.   While I have avoided coding in items that restrict the user, I believe
  231.   that the Protocol, as recommended by TAPR's BBSSIG and TAPR's board, is
  232.   important and should be adopted.
  233.  
  234. *    Command to limit number of BBS incoming sessions 
  235.   Give them a stable xNOS, and then they want to limit the number of users ;-)
  236.   
  237.  
  238.   Well Mat requested:
  239.   "BTW, what do you think of a 'mbox maxusers #' command to limit
  240.   online users?"
  241.  
  242.   Well, it's in 1.12.
  243.  
  244. *    Added a command session uptime command. 
  245.   Didn't take much, and I got tired of typing 'mbox mailstat'...
  246.  
  247. *    Further security options.... 
  248.   There will also be a greater degree of security in release 1.12 in the
  249.   area of email. There are now three new permission flags, no_pbbs_mail
  250.   (Disallow PBBS mail addresses), no_inet_mail (Disallow non-ampr mail
  251.   addresses), and no_ampr_mail (Disallow ampr mail addresses).
  252.  
  253. *    New command 'mbox bidsuffix' 
  254.   There is a new command session command 'mbox bidsuffix', which allows you
  255.   to define the string used to make up the bids on messages created
  256.   locally. This was normally based on the first part of the hostname, but
  257.   for hosts like 'gw.n9xxx.ampr.org', the "12345_GW" didn't cut it. Most
  258.   won't need this, but if you do it's there.
  259.  
  260. *    New command 'mbox rcall' 
  261.   There is a new command session command 'mbox rcall', which allows you to
  262.   define the string used to make up the first element of the haddress used
  263.   in the R: lines ('mbox haddress' should NOT include the callsign). This
  264.   was normally based on the 'ax mycall'. While this is normally not needed,
  265.   some are maintaining more than one TNOS machine (myself included) and
  266.   this allows the callsigns to be the same (or different) and the haddress
  267.   to be varied, also.
  268.  
  269. *    Introducing 'ax25 smartroute' 
  270.   Smart routing is where when an address is overheard which is NOT to your
  271.   TNOS box, it looks in (1) optional remote calls associated with the axip
  272.   interface (more later), (2) the current ax25 routing table, (3) the ax25
  273.   heard listings. If the call is intended for one of these (someone that
  274.   TNOS can identify with an interface - and not the interface it came in
  275.   on), then the packet will be digipeated to the proper interface
  276.   automagically!
  277.  
  278.   For instance, K1XXX is a user located on port '2m' of TNOS system N4YYY.
  279.   N4YYY can connect to him in his BBS with 'C 2m K1XXX'. Now W3ZZZ is
  280.   another xNOS system, connected to N4YYY via an axip link, on his port
  281.   named 'link1'. W3ZZZ can now connect to K1XXX directly using
  282.   'C link1 K1XXX' and K1XXX can connect to W3ZZZ using 'C W3ZZZ' from HIS
  283.   station, without using, or knowing TNOS, and without knowing of the
  284.   existence of N4YYY.
  285.  
  286.   Notice that I said W3ZZZ was a xNOS user, and not a TNOS user. One TNOS
  287.   smart router can serve both ends.
  288.  
  289. *    Maintainence Mode added 
  290.   There are three new commands that alter what I call Maintainence Mode.
  291.   This provides a way to prevent further BBS connects in order to do
  292.   maintainence chores, like expiration.
  293.  
  294.     mbox maintainence [on | off]
  295.         displays/sets state of maintainence mode
  296.  
  297.     mbox maintmode [on | off]
  298.         displays/sets whether maintainence mode is really used
  299.  
  300.     mbox maintstr [string]
  301.         displays/sets the string given to the users that try to
  302.         connect while maintainence is being done.
  303.  
  304.   For example, if 'mbox maintmode' is on, then you can type 'mbox
  305.   maintainence on', and no further logins will be permitted until you type
  306.   'mbox maintainence off'.
  307.  
  308.   The expire code now uses this mode, if it is enabled, to set maintainence
  309.   mode, and then it waits until any current users log off. Once the BBS is
  310.   clear, then the expiration continues.
  311.  
  312.   The White Pages expiration code uses this in the same way.
  313.  
  314.   You will want to schedule these to occur at non-peak times (4 a.m., etc.).
  315.  
  316.  
  317. *    LOOK comes to TNOS 
  318.   One feature that made it into JNOS a while back seemed to escape my
  319.   attention, the 'look' command. If you come to TNOS from a recent JNOS,
  320.   you probably already know about LOOK (except for my additions ;-)
  321.   Thanks goes to Mike Dent <g6phf@unixphf.ampr.org> for making me aware of
  322.   this one.
  323.  
  324.   Typing 'look user' or 'look socket#', gives the sysop a 'split' screen
  325.   picture window of whatever the user you are looking at types OR receives,
  326.   as though you where that user. Special commands for the sysop include:
  327.   
  328.  
  329.     /chat
  330.         starts a chat session to the user, user sees
  331.         "***SYSOP initiated CHAT".
  332.  
  333.     /quit (or /bye or /exit)
  334.         stops the look session or the chat session, if active.
  335.  
  336.     /msg message
  337.         sends a '<sysop>:' followed by your message.
  338.  
  339.     /help (or /?)
  340.         gives a SMALL help message.
  341.  
  342.     /insert command
  343.         allows the sysop to take over and do the typing for users
  344.         from the sysop's look session. The user would still see
  345.         the text the sysop was typing.
  346.  
  347.  
  348. *    Selective holding of locally generated mail 
  349.   Added a command 'mbox holdall' to allow you to hold all locally generated 
  350.   BBS messages for SYSOP review.
  351.  
  352. *     AXUI mode developed 
  353.   Well, added another SYSOP tool, AXUI, which allows you to monitor all
  354.   broadcast UI frames, and allows you to send UI's message to a definable
  355.   callsign out a definable interface. The source callsign is the 'ax user'
  356.   callsign.
  357.  
  358.   Commands syntax is: 'axui <iface> [callsign]" If 'callsign' is
  359.   not given, then 'ID' is used. This gives the sysop a 'split' screen
  360.   picture window of all of the UI non-protocol frames from ALL interfaces.
  361.   The commands within AXUI are:
  362.   
  363.  
  364.     /call callsign
  365.         changes the outgoing destination callsign to 'callsign'
  366.  
  367.     /quit (or /bye or /exit)
  368.         stops the axui session
  369.  
  370.     /interface iface
  371.         changes the outgoing interface to 'iface'
  372.  
  373.     /help (or /?)
  374.         gives a SMALL help message.
  375.  
  376.  
  377.   This is a tool I've needed many times when debugging TNOS or debugging
  378.   the local network. Also, there WAS no way to easily send a keyboard UI
  379.   before. Hopefully this will be useful.
  380.  
  381.  
  382.  
  383. ------------------------------------------------------------
  384. Minor Changes:
  385.  
  386. The following minor changes have occurred.
  387.  
  388.  
  389. *    The "Mailbox" now a "BBS" 
  390.   The point was well made that the "Mailbox" has matured into a "BBS", so the
  391.   logon and logoff messages reflect this change.
  392.  
  393. *    Added to the 'write' command 
  394.   Now the 'write' command will allow you to send data to a Conference
  395.   Bridge user.
  396.  
  397. *    Added automatic parsing/responding to BBS SIDs when forwarding 
  398.   Now, when you set up a script to forward to a BBS through another station,
  399.   the SID of the distant station is parsed, and then an automatic response
  400.   is sent, your SID.
  401.  
  402. *    Less DNS lookups needed with sending mail from the BBS 
  403.   There is now another test done BEFORE isanIPhost(),
  404.   which looks for a properly formatted (read that as '4 character
  405.   continent') PBBS address. If it is one, then the isanIPhost() check is
  406.   not needed....
  407.  
  408. *    Made the BBS commands MM and MC more flexible 
  409.   Now allow a range (x-x) to be given as a parameter, like the 'k' command.
  410.  
  411. *    BBS area descriptions added 
  412.   There is now a file (/spool/help/areas.hlp) which is looked at when a
  413.   user changes areas. If an entry exists for that area, the data from that
  414.   entry is displayed with the area change. This data is NOT displayed for
  415.   BBSs or users that have EXPERT mode on.
  416.  
  417.   The file is in the same format as the other help files:
  418.  
  419.         :keyword
  420.         any data you want
  421.         as many lines as you want
  422.         :newkeyword
  423.  
  424. *    The expire routine accepts non-standard dates. 
  425.   The mod, originally by WA3DSP, has been added with changes to allow dates
  426.   that have 4-character year strings, instead of the standard 2-character
  427.   ones to be properly interpreted.
  428.  
  429. *    AXIP remote callsign support for Smart Routing 
  430.   The AXIP attach command has been extended to include an optional remote
  431.   callsign. This keeps you from having to add all of these to your 'ax
  432.   route' tables to use them with Smart Routing.
  433.  
  434. *    Local SYSOP can now initiate a chat session 
  435.   How many times have you been typing along on your TNOS box, when all of a
  436.   sudden, <BEEP>! Your screen has changed, and you have been abruptly
  437.   placed in a chat session with either a ttylink user or a BBS user using
  438.   the Operator command.
  439.  
  440.   Well, now SYSOPS, you can turn the tables. There is now a command session
  441.   command 'mb chat <bbsuser>' (with a 'chat <bbsuser>' for the lazy among
  442.   us). If the user is NOT sitting idle at a command prompt, when the current
  443.   command is complete they are placed into the chat session (Do not pass
  444.   go, Do not collect $200.00)
  445.  
  446.   If they ARE idle at the command prompt, they are BEEPed at and told that
  447.   "SYSOP requests a chat.....", and they are in the chat.
  448.  
  449.   Thanks to Mike Dent <g6phf@lurpac.lancs.ac.uk> for the suggestion....
  450.  
  451. *    BBS 'encode' command 
  452.   There is now a BBS 'encode' command, requires SYSOP permissions,
  453.   which encodes the FTPUSERS files from the BBS.
  454.  
  455. *    Added the 'ax25 user' command 
  456.   There is now an 'ax25 user <callsign>" command, which sets the callsign
  457.   used for console connects. This is the companion to the 'netrom user'
  458.   command. This allows outgoing connects to use the same call on all
  459.   interfaces, regardless of the interface call. It can also be used, for
  460.   instance, at a club station machine, to painlessly change call signs for
  461.   different users.
  462.  
  463. *    Added a 'quiet' parameter to statline 
  464.   The command session command is changed to 'statline [on|off] [quiet]',
  465.   allowing you to turn statline on without getting the audible alert when
  466.   data comes in to one of your non-selected interactive sessions.
  467.  
  468.  
  469.  
  470. ------------------------------------------------------------
  471. Known Bugs:
  472.  
  473. The following are known bugs that remain as of release 1.12.
  474.  
  475. *     TCPGATE problems 
  476.   There is a problem with TCPGATE if a socket is prematurely closed. This is
  477.   being worked on.
  478.  
  479. *     Screen saver not right in Linux version 
  480.   Display doesn't clear, just overwrites. Not harmful, but not right.
  481.  
  482. *     BID and WHITE PAGES flakiness, at times 
  483.   The expiring and sorting of BIDS and WP can at times make things
  484.   a little flakey. These are still under construction.
  485.  
  486. *    Infrequent 'SC' bug 
  487.   If you use 'SC', sometimes not all of the copies get sent, if PBBS
  488.   forwarding is used.
  489.  
  490. *    FTP permissions improved 
  491.   The new UNIX-like dir display needs a little more work with the permissions
  492.   portion of the display...
  493.  
  494. *    Data coming into a 'closed' port causes bad things 
  495.   If data comes into a port that WAS open but is NOW closed, bad things can
  496.   happen. This is not a TNOS-specific bug, but has been around since
  497.   probably day one.
  498.  
  499.  
  500. ------------------------------------------------------------
  501. To-Do List:
  502.  
  503. The following are things on my 'to-do' list that should eventually
  504. be done, but not necessarily by the next release.
  505.  
  506. *    Linux kernel AX25 devices available from TNOS/Linux 
  507.   This would allow the PI card to be used....
  508.  
  509. *    BID History moved to an in-memory structure 
  510.   This will eliminate the need to sort the history file, allow faster
  511.   lookups, and eliminate the need to 'bid kick' in order to update the BID
  512.   info.
  513.  
  514. *    Bypass internet SMTPClient->SMTPServer for local mail 
  515.   Find a way to do all that is being done, without the overhead of two
  516.   separate processes, and two different temp files.
  517.  
  518. *    FBB-style forwarding 
  519.   No, I didn't give up on this....
  520.  
  521. *    HTTP daemon??? 
  522.   Who knows!
  523.  
  524. *    Add in a way to process PBBS 'import' files 
  525.   Probably by rewriting a file to area 'import', the file would be processed
  526.   and the messages treated as being received by a direct PBBS connection.
  527.  
  528. *    Possible incoming email 'budlist' 
  529.   Possibly add a command to look at incoming "From:" addresses and either
  530.   hold the message, bounce it, or bit-bucket it if it comes from a 'budlist'ed
  531.   name in a file.
  532.  
  533. *    Possible incoming email 'bad words' filter 
  534.   This would hold messages if they contained words found in a 'bad words'
  535.   file.
  536.  
  537. *    Modify the delegation server 
  538.   Make this only send ONE notification per user per delegation period.
  539.  
  540. *    Add capability to TScript to allow starting of OS commands 
  541.   This MAY or MAY NOT be limited to Linux version.
  542.  
  543. *    Add in UNIX permissions checking to FTP server 
  544.   This could cause problems with restricted files not being restricted.
  545.  
  546.  
  547.